package modelo;

import java.util.Date;
import modelo.exception.RangoDeFechaIncorrectoException;
import modelo.tareas.Tarea;
import modelo.util.MyDate;

/**
 * 
 * @author rocio
 *
 */
public class Asignacion {
	
	// Variables  *********************************************************** //
	private Date fechaInicio;
	private Date fechaFin; 
	private Usuario usuarioAsignado; 
	private Tarea tareaAsignada;
	
	//Constructor *********************************************************** //

	
	public Asignacion(String fechaInicio, String fechaFin,
			Usuario usuarioAsignado, Tarea tareaAsignada){
		
		try{//si el orden de las fechas es incorrecto las invierto
			this.fechaInicio = new MyDate(fechaInicio).getFechaYHora();
			this.fechaFin = new MyDate(fechaFin).getFechaYHora();
			if(this.fechaFin.getTime() - this.fechaInicio.getTime() < 0){
				throw new RangoDeFechaIncorrectoException("la fecha de fin es inferior a la fecha de inicio");
		}}catch(RangoDeFechaIncorrectoException  ex){
			Date temp = this.fechaInicio;
			this.fechaInicio = this.fechaFin;
			this.fechaFin = temp;
		}
		this.usuarioAsignado = usuarioAsignado;
		this.tareaAsignada = tareaAsignada;
	}
	
	
	
	public Asignacion(Date fechaInicio,Date fechaFin,
			Usuario usuarioAsignado, Tarea tareaAsignada)  {
		try{//si el orden de las fechas es incorrecto las invierto
			this.fechaInicio = fechaInicio;
			this.fechaFin = fechaFin;
			if(this.fechaFin.getTime() - this.fechaInicio.getTime() < 0){
				throw new RangoDeFechaIncorrectoException("la fecha de fin es inferior a la fecha de inicio");
		}}catch(RangoDeFechaIncorrectoException  ex){
			Date temp = this.fechaInicio;
			this.fechaInicio = this.fechaFin;
			this.fechaFin = temp;
		}
		this.usuarioAsignado = usuarioAsignado;
		this.tareaAsignada = tareaAsignada;
	}

	
	
	
	//Metodos     *********************************************************** //
	/**
	 * Retorna la cantidad de horas que dura una asignacion
	 * @return int 
	 */
	public int duracionDeLaAsignacion(){//devuelve la duracion en cantidad de horas.
		int fin = (int)this.getFechaFin().getTime();
		int inicio = (int) this.getFechaInicio().getTime();
		return (fin - inicio)/3600000;
		// si hubiese la clase hora este seria la parte de hora,
		//si necesitara los minutos la cuenta seria (fin - inicio)%3600000
	}
	

	//GET&SET     *********************************************************** //

	public Date getFechaInicio() {
		return fechaInicio;
	}
	public void setFechaInicio(Date fechaInicio) {
		this.fechaInicio = fechaInicio;
	}
	public void setFechaInicio(String fechaInicio) {//es x si quiero setear una fecha a partir de un String
		this.fechaInicio = new MyDate(fechaInicio).getFechaYHora();
	}
	
	public Date getFechaFin() {
		return fechaFin;
	}
	public void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}
	public void setFechaFin(String fechaFin) {//es x si quiero setear una fecha a partir de un String
		this.fechaFin = new MyDate(fechaFin).getFechaYHora();
	}
	public Usuario getUsuarioAsignado() {
		return usuarioAsignado;
	}
	public void setUsuarioAsignado(Usuario usuarioAsignado) {
		this.usuarioAsignado = usuarioAsignado;
	}
	public Tarea getTareaAsignada() {
		return tareaAsignada;
	}
	public void setTareaAsignada(Tarea tareaAsignada) {
		this.tareaAsignada = tareaAsignada;
	}
	
	

	
}
